from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Float
from sqlalchemy.orm import sessionmaker
from config import config

mysql = config["mysql"]
engine = create_engine(
    "mysql+pymysql://%s:%s@%s:3306/%s?charset=utf8" % (mysql["user"], mysql["password"], mysql["host"], mysql["database"]),
    max_overflow=-1,        # 超过连接池大小外最多创建的连接
    pool_size=0,            # 连接池大小
    pool_timeout=30,        # 池中没有线程最多等待的时间，否则报错
    pool_recycle=28800         # 多久之后对线程池中的线程进行一次连接的回收（重置）
)
DBSession = sessionmaker(bind=engine)

Base = declarative_base()


# User
class Users(Base):
    __tablename__ = "users"
    id = Column(Integer, autoincrement=True, primary_key=True, nullable=False)
    nick_name = Column(String(255), default=None)       # 昵称
    head_img = Column(String(255), default=None)        # 头像
    email = Column(String(255), default=None)           #
    password = Column(String(255), default=None)        #
    status = Column(Integer, nullable=False, default=1)     # 账户状态，0-异常，1-正常
    is_delete = Column(Integer, nullable=False, default=0)  # 是否删除，0-否，1-是
    create_time = Column(DateTime, default=datetime.now)  # 创建时间
    last_login_time = Column(DateTime)                  # 上一次登录时间
    last_online_time = Column(DateTime)                 # 上一次活跃时间


# 公司
class Company(Base):
    __tablename__ = "company"
    id = Column(Integer, autoincrement=True, primary_key=True, nullable=False)
    user_id = Column(Integer, nullable=False)               # 用户id
    company_name = Column(String(255), default=None)        # 名称
    company_boss = Column(String(255), default=None)        # 公司管理人
    company_address = Column(String(255), default=None)     # 公司地址
    remark = Column(String(255), default=None)              # 备注
    on_the_job = Column(Integer, nullable=False, default=0)  # 是否在职，0-离职，1-在职
    position = Column(String(255), default=None)            # 职位
    is_delete = Column(Integer, nullable=False, default=0)  # 是否删除，0-否，1-是
    create_time = Column(DateTime, default=datetime.now)  # 创建时间


# 公司数据管理
class CompanyData(Base):
    __tablename__ = "company_data_manage"
    id = Column(Integer, autoincrement=True, primary_key=True, nullable=False)
    user_id = Column(Integer, nullable=False)           # 用户id
    company_id = Column(Integer, default=None)          # 公司id
    name = Column(String(255), default=None)            # 名称
    username = Column(String(255), default=None)        # 用户名
    password = Column(String(255), default=None)        # 密码
    remark = Column(String(255), default=None)          # 备注
    is_delete = Column(Integer, nullable=False, default=0)  # 是否删除，0-否，1-是
    create_time = Column(DateTime, default=datetime.now)  # 创建时间


# 备忘录
class Memorandum(Base):
    __tablename__ = "memorandum"
    id = Column(Integer, autoincrement=True, primary_key=True, nullable=False)
    user_id = Column(Integer, nullable=False)       # 用户id
    name = Column(String(255), default=None)        # 名称
    content = Column(String(1024), default=None)    # 内容
    create_time = Column(DateTime, default=datetime.now)  # 创建时间


# User
class UserDoLog(Base):
    __tablename__ = "user_do_log"
    id = Column(Integer, autoincrement=True, primary_key=True, nullable=False)
    user_id = Column(Integer, nullable=False)           # 用户id
    user_name = Column(String(255), default=None)       # 昵称
    todo = Column(String(255), default=None)            # 做了什么
    ip = Column(String(100), default=None)              # ip地址
    create_time = Column(DateTime, default=datetime.now)  # 创建时间


# 创建表
def create_db():
    print("start create database.....")

    # Base.metadata.drop_all(engine)
    # print("drop all tables success!")

    Base.metadata.create_all(engine)
    print("created tables success!")


if __name__ == '__main__':
    create_db()
